//
//  JMPlayerView.h
//  PlayerController
//
//  Created by 赵俊明 on 2018/12/3.
//  Copyright © 2018 赵俊明. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "JMPlayerControlView.h"
#import "JMSourceModel.h"
#import "JMPlayerControlViewDelegate.h"

NS_ASSUME_NONNULL_BEGIN

// 监听TableView的contentOffset
#define kZFPlayerViewContentOffset @"contentOffset"
#define CellPlayerFatherViewTag  200

// player的单例
#define ZFPlayerShared [ZFBrightnessView sharedBrightnessView]

@protocol ZFPlayerDelegate <NSObject>
@optional
/** 返回按钮事件 */
- (void)jm_playerBackAction:(NSInteger)currentTime;
/** 下载视频 */
- (void)jm_playerDownload:(NSString *)url;
/** 控制层即将显示 */
- (void)jm_playerControlViewWillShow:(UIView *)controlView isFullscreen:(BOOL)fullscreen;
/** 控制层即将隐藏 */
- (void)jm_playerControlViewWillHidden:(UIView *)controlView isFullscreen:(BOOL)fullscreen;
/** 播放失败回调 */
- (void)jm_playerFaild:(JMSourceModel *)playerModel;
@end

// playerLayer的填充模式（默认：等比例填充，直到一个维度到达区域边界）
typedef NS_ENUM(NSInteger, ZFPlayerLayerGravity) {
    ZFPlayerLayerGravityResize,           // 非均匀模式。两个维度完全填充至整个视图区域
    ZFPlayerLayerGravityResizeAspect,     // 等比例填充，直到一个维度到达区域边界
    ZFPlayerLayerGravityResizeAspectFill  // 等比例填充，直到填充满整个视图区域，其中一个维度的部分区域会被裁剪
};

// 播放器的几种状态
typedef NS_ENUM(NSInteger, ZFPlayerState) {
    ZFPlayerStateFailed,     // 播放失败
    ZFPlayerStateBuffering,  // 缓冲中
    ZFPlayerStatePlaying,    // 播放中
    ZFPlayerStateStopped,    // 停止播放
    ZFPlayerStatePause       // 暂停播放
};

@interface JMPlayerView : UIView <JMPlayerControlViewDelegate>

/** 设置playerLayer的填充模式 */
@property (nonatomic, assign) ZFPlayerLayerGravity    playerLayerGravity;
/** 是否有下载功能(默认是关闭) */
@property (nonatomic, assign) BOOL                    hasDownload;
/** 是否开启预览图 */
@property (nonatomic, assign) BOOL                    hasPreviewView;
/** 设置代理 */
@property (nonatomic, weak) id<ZFPlayerDelegate>      delegate;
/** 是否被用户暂停 */
@property (nonatomic, assign, readonly) BOOL          isPauseByUser;
/** 播发器的几种状态 */
@property (nonatomic, assign, readonly) ZFPlayerState state;
/** 静音（默认为NO）*/
@property (nonatomic, assign) BOOL                    mute;
/** 当cell划出屏幕的时候停止播放（默认为NO） */
@property (nonatomic, assign) BOOL                    stopPlayWhileCellNotVisable;
/** 当cell播放视频由全屏变为小屏时候，是否回到中间位置(默认YES) */
@property (nonatomic, assign) BOOL                    cellPlayerOnCenter;
/** player在栈上，即此时push或者模态了新控制器 */
@property (nonatomic, assign) BOOL                    playerPushedOrPresented;
/** 播放时候默认自动全屏 */
@property (nonatomic, assign) BOOL                    fullScreenPlay;

/**
 *  单例，用于列表cell上多个视频
 *
 *  @return ZFPlayer
 */
+ (instancetype)sharedPlayerView;

/**
 * 指定播放的控制层和模型
 * 控制层传nil，默认使用ZFPlayerControlView(如自定义可传自定义的控制层)
 */
- (void)playerControlView:(UIView *)controlView playerModel:(JMSourceModel *)playerModel;

/**
 * 使用自带的控制层时候可使用此API
 */
- (void)playerModel:(JMSourceModel *)playerModel;

/**
 *  自动播放，默认不自动播放
 */
- (void)autoPlayTheVideo;

/**
 *  重置player
 */
- (void)resetPlayer;

/**
 *  在当前页面，设置新的视频时候调用此方法
 */
- (void)resetToPlayNewVideo:(JMSourceModel *)playerModel;

/**
 *  播放
 */
- (void)play;

/**
 * 暂停
 */
- (void)pause;

@end

NS_ASSUME_NONNULL_END
